<template>
	<BasicModal v-bind="$attrs" @register="registerModal" destroyOnClose :title="getTitle" @ok="handleSubmit">
		<BasicForm @register="registerForm" style="height:400px;" />
	</BasicModal>
</template>
<script lang="ts" setup>
	import { ref, computed, unref } from 'vue';
	import { BasicModal, useModalInner } from '/src/components/Modal';
	import { BasicForm, useForm } from '/src/components/Form';
	import { formSchema } from '../category.data';
	import { loadTreeData, updateActivityTypesByRedisApi } from '../category.api';
	// 获取emit
	const emit = defineEmits(['register', 'success']);
	const isUpdate = ref(true);
	const expandedRowKeys = ref([]);
	const treeData = ref([]);
	const isSubAdd = ref(false);
	//表单配置
	const [registerForm, { resetFields, setFieldsValue, validate, updateSchema }] = useForm({
		schemas: formSchema,
		showActionButtonGroup: false,
		labelCol: {
			xs: { span: 24 },
			sm: { span: 4 },
		},
		wrapperCol: {
			xs: { span: 24 },
			sm: { span: 18 },
		},
	});
	//表单赋值
	const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
		//重置表单
		await resetFields();
		expandedRowKeys.value = [];
		setModalProps({ confirmLoading: false, minHeight: 80 });
		isUpdate.value = !!data?.isUpdate;
		//update-begin---author:wangshuai ---date: 20230829 for：分类字典data.record为空报错------------
		isSubAdd.value = !data?.isUpdate && data.record && data.record.id;
		//update-end---author:wangshuai ---date: 20230829 for：分类字典data.record为空报错------------
		if (data?.record) {
			//表单赋值
			await setFieldsValue({
				...data.record,
			});
		}
		//父级节点树信息
		treeData.value = await loadTreeData({ async: false, pcode: '' });
		updateSchema({
			field: 'pid',
			componentProps: { treeData },
		});
	});
	//设置标题
	const getTitle = computed(() => (!unref(isUpdate) ? '新增字典' : '编辑字典'));

	/**
	 * 根据pid获取展开的节点
	 * @param pid
	 * @param arr
	 */
	function getExpandKeysByPid(pid, arr) {
		if (pid && arr && arr.length > 0) {
			for (let i = 0; i < arr.length; i++) {
				if (arr[i].key == pid && unref(expandedRowKeys).indexOf(pid) < 0) {
					expandedRowKeys.value.push(arr[i].key);
					getExpandKeysByPid(arr[i]['parentId'], unref(treeData));
				} else {
					getExpandKeysByPid(pid, arr[i].children);
				}
			}
		}
	}
	//表单提交事件
	async function handleSubmit() {
		try {
			let values = await validate();
			setModalProps({ confirmLoading: true });
			console.log(values)
			let types = JSON.parse(localStorage.getItem("activityTypes"));
			let ts = types;
			//组装
			if (!values.pid || values.pid == 0) {
				//添加一级分类
				for (let i = 0; i < types.length; i++) {
					//这里判断是添加还是修改一级分类
					if (values.id == types[i].id) {
						console.log(88, '-----',)
						//修改
						values.typeCode = ts[i].typeCode
						ts[i] = values;
						break;
					} else {
						if (i == types.length - 1) {
							console.log(i + "----->95")
							let obj = {}
							obj.pid = 0;
							obj.id = types.length + 1
							obj.hasChild = 0
							obj.gtype = values.gtype
							obj.gtitle = values.gtitle
							obj.sort = values.sort
							obj.msg = values.msg
							obj.typeCode = []
							ts.push(obj);
							break;
						}
					}

				}
			} else {
				for (let i = 0; i < types.length; i++) {
					if (values.pid == types[i].id) {
						console.log('------>', 103)
						let obj = {}
						if (types[i].typeCode.length == 0) {
							obj.title = values.gtitle
							obj.sort = values.sort
							obj.hasChild = 0
							obj.pid=types[i].id
							obj.code =  ts[i].typeCode.length + Math.floor(Math.random() * 10000000)
							ts[i].typeCode.push(obj);
							break;
						}
						for (let j = 0; j < types[i].typeCode.length; j++) {
							obj = {}
							if (values.code && values.code == types[i].typeCode[j].code) {
								//修改
								obj.title = values.gtitle
								obj.sort = values.sort
								obj.hasChild = 0
								ts[i].typeCode[j] = obj
								break;
							} else {
								//新增一个
								if (j == types[i].typeCode.length - 1) {
									obj.title = values.gtitle
									obj.sort = values.sort
									obj.hasChild = 0
									obj.pid=types[i].id
									obj.code = ts[i].typeCode.length + Math.floor(Math.random() * 10000000)
									ts[i].typeCode.push(obj);
									break;
								}
							}
						}
					}

				}
			}

			let tObj = {
				travelActiveType: JSON.stringify(ts)
			}
			//提交表单
			await updateActivityTypesByRedisApi(tObj);
			//关闭弹窗
			closeModal();
			//展开的节点信息
			//刷新列表(isUpdate:是否编辑;values:表单信息;expandedArr:展开的节点信息)
			emit('success', { isUpdate: unref(isUpdate), isSubAdd: unref(isSubAdd), values: { ...values }, expandedArr: unref(expandedRowKeys).reverse() });
		} finally {
			setModalProps({ confirmLoading: false });
		}
	}
</script>